Dakle, u pitanju je win service koji nakon odredjenog vremenskog intervala salje odredjenu sekvencu sa tastature (SHIFT+S, Enter, SHIFT+P) u odredjeni proces.
Posto taj proces ne postoji na masini na kojoj razvijam servis, za test koristim notepad. Takodje, za test umjesto pomenute sekvence koristim slanje nekog obicnog laraktera.
private void UradiNesto()
{
if (IsProcessStarted("notepad") == true)
{
try
{
Process[] procs = Process.GetProcessesByName("notepad");
foreach (Process proc in procs)
{
if (proc.MainWindowTitle == "Untitled - Notepad")
{
IntPtr hWnd = FindWindowEx(proc.MainWindowHandle, IntPtr.Zero, "edit", null);
string s = "Hello";
for (int i = 0; i < s.Length; i++)
{
PostMessage(hWnd, WM_KEYDOWN, VkKeyScan(s), 0);
}
break;
}
}
MojEventLog.WriteEntry("Sekvenca poslana");
}
catch
{
MojEventLog.WriteEntry("Greska! Poruka nije upisana.");
}
}
else
{
MojEventLog.WriteEntry("Notepad nije startovan.");
}
}
Ovo je kod koji se izvrsava nakon odredjenog vremena. Testiram ga tako sto otvorim prazan notepad fajl (Untitled-Notepad) i minimizujem ga. Problem je sto se u logu upisuje da je sekvenca poslana ali se u notepadu ne vidi poslano 'Hello'. Posto servis radi pod LocalService accountom sumnjam da je zbog toga. Probao sam servis instalirati i pod userskim accountom
[RunInstaller(true)]
public partial class ProjectInstaller : Installer
{
public ProjectInstaller()
{
InitializeComponent();
mojServiceProcessInstaller.Account = ServiceAccount.User;
mojServiceProcessInstaller.Username = "domenski.korisnik";
mojServiceProcessInstaller.Password = "password";
}
}
ali instalacija puca uz poruku 'The instaler has encountered an unexpected error installing this package. This may indicate a problem with this package. The error code is 2869.'
Jos jedan kuriozitet je da kad gore pomenutu proceduru slanja sekvence odradim u Windows formi sekvenca se bez problema upisuje u minimizovani notepad fajl. Zbog toga i sumnjam na service account.
Pomoc? :)