728x90

    Rectangle backup;

        private void checkBox_mouse_tracking_CheckedChanged(object sender, EventArgs e)

        {

            if (checkBox_mouse_tracking.Checked)

            {

                backup = Cursor.Clip;

                this.Cursor = new Cursor(Cursor.Current.Handle);

                Cursor.Position = new Point(this.Location.X+ label_mouse_tracking.Location.X , this.Location.Y + label_mouse_tracking.Location.Y);

                Point p = new Point(this.Location.X + label_mouse_tracking.Location.X+7, this.Location.Y + label_mouse_tracking.Location.Y+30);

                

                Cursor.Clip = new Rectangle(p, label_mouse_tracking.Size);

            }

            else

            {

                Cursor.Clip = backup;

            }

            

        }



    }

728x90
728x90
public static void SetSleepTime(int sec)
        {
            RegistryKey driverKeyRoot = Microsoft.Win32.Registry.LocalMachine.OpenSubKey("SYSTEM\\CurrentControlSet\\Control\\Power\\Timeouts", true);
            driverKeyRoot.SetValue("ACUserIdle", sec, RegistryValueKind.DWord);
            driverKeyRoot.SetValue("BattUserIdle", sec, RegistryValueKind.DWord);
            driverKeyRoot.Close();
        }

분명 레지스트리는 바로바로 바뀌는데
sleep time은 한번에 적용되지 않는 경우가 있다.
왜 그럴까?
728x90
728x90

C언어에서 sendMessage()함수를 사용하는 것처럼 C#에서도 구현하고 싶은데 이것이 또 그냥 되지는 않더라.


[DllImport("coredll.dll", CharSet = CharSet.Auto)]
        static extern IntPtr SendMessage(IntPtr hWnd, UInt32 Msg, IntPtr wParam, IntPtr lParam);

이런 식으로 함수원형을 선언했다.

이렇게 구현하여 보내는 Message는 WndProc함수를 이용하여 확인할 수 있는데 .net framework에서는 Form class에서 지원하지만  compactframework에서는 사용할 수 없다.

MessageWindow를 이용하여 우회적으로 사용할 수는 있다.

protected override void WndProc(ref Message msg)
        {
            switch (msg.Msg)
            {
                case (MSG.Message1):
                    Console.WriteLine("Message1");
                    Program.mainform.Function1();
                    break;
                case (MSG.Message2):
                    Console.WriteLine("in WndProc Message2");
                    switch (MSG.WParam.ToInt32())
                    {
                        case START:
                            if (Program.mainform.CLI_Flag == true)
                            {
                                Program.mainform.AbortThread();
                            }
                            Program.mainform.g_bStop = true;
                            break;
                        case PAUSE:
                            break;
                        case RESTART:
                            break;
                        case END:
                            Console.WriteLine("END");
                            if (Program.mainform.CLI_Flag == true)
                            {
                                Program.mainform.CreateThread();
                            }
                            break;
                        case ERROR:
                            break;
                    }                    
                    //Do something here
                    break;
            }

            // call the base class WndProc for default message handling
            base.WndProc(ref msg);
        }
    }

다음은 message를 보내는 부분이다
SendMessage(winproc.Hwnd, MSG.Message1, IntPtr.Zero, IntPtr.Zero);

핸들러를 IntPtr형식으로 주게되면 dll에서 메시지를 보내는 것도 동일하게 받아올 수 있다.

728x90
728x90

[DllImport("coredll.dll", CharSet = CharSet.Unicode)]
        private static extern uint RegOpenKeyEx(
            uint HKEY,
            string lpSubKey,
            int ulOptions,
            uint samDesired,
            out uint phkResult);

        [DllImport("coredll.dll", CharSet = CharSet.Unicode)]
        private static extern uint RegQueryValueEx(
            uint hKey,
            string lpValueName,
            int lpReserved,
            ref int lpType,
            StringBuilder lpData,
            ref int lpcbData);

        [DllImport("coredll.dll")]
        private static extern int RegSetValueEx(
            uint hKey,
            [MarshalAs(UnmanagedType.LPArray)] byte[] lpValueName,
            int Reserved,
            Microsoft.Win32.RegistryValueKind dwType,
            [MarshalAs(UnmanagedType.LPArray)] byte[] lpData,
            int cbData);


        [DllImport("coredll.dll")]
        private static extern int RegCloseKey(uint hkey);

그런데 바로 적용되는 것이 있는가하면 재부팅 후 적용이 되는 녀석들도 많아 의도하는데로 사용하진 못했다.

728x90

+ Recent posts