Giter VIP home page Giter VIP logo

Comments (5)

changkun avatar changkun commented on July 29, 2024

Can you provide a reproducible code?

from clipboard.

jinmao88 avatar jinmao88 commented on July 29, 2024

func WatchClipboard(ctx context.Context) {

err := clipboard.Init()
if err != nil {
	logger.Error(ctx, err)
	return
}
logger.Print(ctx, "新开始监听")

ch := clipboard.Watch(ctx, clipboard.FmtText)
for data := range ch {
	// print out clipboard data whenever it is changed
	//println(string(data))
	s := string(data)
	logger.Print(ctx, s)
	if s != "" {
		checkTxt(s)
		logger.Print(ctx, s)
	}
}

}

build exe ,and run in the win service

from clipboard.

jinmao88 avatar jinmao88 commented on July 29, 2024

run in the win service

github.com/kardianos/service

use the demo

from clipboard.

changkun avatar changkun commented on July 29, 2024

I dont' know how to run your code, but it looks to me that your desired case is very similar to this application: https://github.com/changkun/midgard, which was tested on window as a service.

from clipboard.

jinmao88 avatar jinmao88 commented on July 29, 2024
package main

import (
	"context"
	"flag"
	"github.com/gogf/gf/v2/container/garray"
	"github.com/gogf/gf/v2/os/gctx"
	"github.com/gogf/gf/v2/os/glog"
	"github.com/takama/daemon"
	"golang.design/x/clipboard"
	"os"
)

var content = garray.New(true)

var (

	logger        = glog.New()
)

type Service struct {
	daemon.Daemon
}

// Manage by daemon commands or run the daemon
func (service *Service) Manage() (string, error) {
	ctx := gctx.New()

	// If received any kind of command, do it
	if len(os.Args) > 1 {
		logger.Print(ctx, "参数", os.Args[1])
		command := os.Args[1]
		switch command {
		case "install":
			return service.Install()
		case "remove":
			return service.Remove()
		case "start":
			return service.Start()
		case "stop":
			// No need to explicitly stop cron since job will be killed
			return service.Stop()
		case "status":
			return service.Status()
		default:
			return "", nil
		}
	}
	// Set up channel on which to send signal notifications.
	// We must use a buffered channel or risk missing the signal
	// if we're not ready to receive when the signal is sent.
	p := &program{}

	return service.Run(p)
}

type program struct{}

func (p *program) Start() {
	// Start should not block. Do the actual work async.
	go p.Run()
}
func (p *program) Run() {
	ctx := gctx.New()
	logger.SetPath(`C:\run\log`)
	logger.Print(ctx, "启动")
	//interrupt := make(chan os.Signal, 1)
	//signal.Notify(interrupt, os.Interrupt, os.Kill, syscall.SIGTERM)

	go func() {
		WatchClipboard(ctx)
	}()


}
func (p *program) Stop() {
	// Stop should not block. Return with a few seconds.

}

func main() {
	flag.Parse()
	//v1, v2, v3 = GetSystemVersion()
	//
	ctx := gctx.New()
	logger.SetPath(`C:\run\log`)


	name := "GoDaemonService1"

	srv, err := daemon.New(name, name, daemon.SystemDaemon)
	if err != nil {
		logger.Error(ctx, err)
		os.Exit(1)
	}

	service := &Service{srv}
	status, err := service.Manage()
	if err != nil {
		logger.Error(ctx, err)
		os.Exit(1)
	}

	logger.Print(ctx, status)

}





func WatchClipboard(ctx context.Context) {

	err := clipboard.Init()
	if err != nil {
		logger.Error(ctx, err)
		return
	}
	logger.Print(ctx, "新开始监听")

	textCh := clipboard.Watch(ctx, clipboard.FmtText)
	for {
		select {
		case <-ctx.Done():
			return
		case text, ok := <-textCh:
			if !ok {
				return
			}

			logger.Print(ctx, string(text), 123)

		}
	

	}
}


this my code ,run in the service ,the clipboard.watch not work

from clipboard.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.