2012-12-05 21 views
10

SendInput işlevinin doğru kullanımını anlamaya çalışıyorum, böylece imleci doğrudan ekran üzerinde işlem yapabilirim, böylece işlerin nasıl çalıştığını görmek için temel bir test için bu kısa snippet'i yaptım bu, imleci 10 piksel sağa taşımalıdır. Teoride.SendInput sistemi uyku moduna geçiriyor

#include <windows.h> 
#include <winable.h> 

int main() 
{ 
    INPUT joyInput; 
    joyInput.type = INPUT_MOUSE; 
    joyInput.mi.dx = 10; 
    joyInput.mi.dwFlags = MOUSEEVENTF_MOVE; 
    SendInput(1, &joyInput, sizeof(INPUT)); 
    return 0; 
} 

Ancak uygulamada, SendInput fonksiyon uyumaya bilgisayarımı koyarak ya olduğu ya da en azından kesinlikle istenmeyen bir etkidir benim monitörleri, kapatıyor! Bu satırın yorumlanması, sorunun gerçekleşmesini önler, ancak açıkçası, görevi gerçekleştirmek için ona ihtiyacım var. Neyi yanlış yapıyorum?

+0

Bu eski bir iş parçacığı, ancak aynı soruna ben de vurdum ve nedenini paylaşmak istedim. Zaman olayını fare olayına uygulamazsanız, bir sebepten dolayı ekranın gücünü kapatır. Belki bu olayları kullanarak giriş zaman aşımı hesaplanıyor? Bu sadece test için yararlı görünüyor, ancak üretim kodu için bir anlam ifade etmiyor. Her neyse, bir zaman atamak için GetTickCount() kullanabilirsiniz: joyInput.mi.time = GetTickCount(); – MonoQuemado

cevap

7

MOUSEINPUT yapısının, başlatılamayan üç üyesi vardır: dy, mouseData ve time. Belgelerin varsayılan değerlerden bahsetmediği için, programın başlangıçta bu üyeleri istediği her ne ile doldurduğunu ücretsiz olarak kabul ediyorum. Bunu önlemek için değerleri açıkça ayarlamanız gerekir.

#include <windows.h> 
#include <winable.h> 

int main() 
{ 
    INPUT joyInput; 
    joyInput.type = INPUT_MOUSE; 
    joyInput.mi.dx = 10; 
    joyInput.mi.dwFlags = MOUSEEVENTF_MOVE; 

    joyInput.mi.dy = 0; 
    joyInput.mi.mouseData = 0; 
    joyInput.mi.time = 0; 

    SendInput(1, &joyInput, sizeof(INPUT)); 
    return 0; 
}