示例#1
0
        private void doFish(Object state)
        {
            try
            {
                // 1 Cast fishing
                log.Debug("Cast fishing");
                Input.Keyboard.ISendString send = new Input.Keyboard.User32_SendInput_VirtualKeycode();
                send.SendString("1");

                // 2 Find Bobber on screen
                Thread.Sleep(100);
                log.Debug("Try to find bobber.");
                Point hookPos = getHookPos();

                log.Info($"Found bobber at {hookPos.ToString()}");

                // 3 Listen for catch noise
                log.Debug("Start listening to audio output");
                log.Debug("Get audio device");
                // http://gigi.nullneuron.net/gigilabs/displaying-a-volume-meter-using-naudio/
                MMDeviceEnumerator SndDevEnum = new MMDeviceEnumerator();
                MMDevice           SndDevice  = SndDevEnum.GetDefaultAudioEndpoint(DataFlow.Render, Role.Multimedia);

                while (timerEnabled)
                {
                    double volume = SndDevice.AudioMeterInformation.MasterPeakValue * 100;
                    log.Verbose("Current volume is:" + volume);
                    if (volume > 20)
                    {
                        log.Info("Catch detected!");
                        break;
                    }
                    Thread.Sleep(100);
                }

                // 4 Click on Bobber
                log.Info($"Click bobber at {hookPos.ToString()}");
                new Input.Mouse.User32_MouseClick(new Input.Mouse.User32_MousePosition()).Left(hookPos);
            }
            catch (Exception e)
            {
                log.Error("Catching a fish failed", e);
            }
        }