DUVIDA COM SENDKEYS

MARSOLIM 15/01/2014 19:56:10
#433114
pessoal estou tentando usar o sendkeys em um programa mas não estou conseguindo. o que eu preciso é ao terminar uma ação abrir um programa e enviar um ctrl+S para ele. esse ctrl+s é um atalho para o programa terminar o que está fazendo. para detalhar melhor eu quero fazer um vídeo usando o camtasia mas como é um processo demorado eu quero que depois que o programa terminar, abrir o camtasia recorder e enviar o ctrl+s para parar a gravação. quando a gravação começa ele vai para perto do relógio na barra de tarefas e quando dou ctrl+s ele abre e para de gravar. então tentei o método abaixo
        Process.Start([Ô]C:\Program Files\TechSmith\Camtasia Studio 7\CamRecorder.exe[Ô])
System.Threading.Thread.Sleep(5000)
My.Computer.Keyboard.SendKeys([Ô]^S[Ô])
ele abre mas o sendkeys não funciona. estranho que eu se eu abro o bloco de notas e envio ctrl+o funciona. alguma dica? estou a dias queimando a mufa com isso e já procurei no google e aqui no forum mas não consegui adaptar nada.
muito agradeço a atenção.
MARSOLIM 22/01/2014 17:47:43
#433413
nenhuma ideia aqui? ainda não consegui vencer essa. ja tentei usar api tambem mas não consegui.
GGERMINIANI 22/01/2014 17:53:38
#433414
SendKeys.Send([Ô]^S[Ô])
PROFESSOR 24/01/2014 07:55:44
#433483
O método SendKeys só é efetivo na tarefa (ou aplicativo) em foco/execução. Assim, se você executa outra aplicação de forma independente, essa outra aplicação terá o foco e o seu código não terá efeito. Há diversas questões similares á sua aqui no Fórum.
Nessa questão então, o problema á ser resolvido é lidar com o processo á ser executado e não apenas iniciar um processo externo. Por exemplo, creio que fazer algo como o código abaixo deveria, em tese, facilitar essa questão.

       ...
Threading.Thread.Sleep(1)
Dim proc As New Process()
With proc.StartInfo
.UseShellExecute = True
.WindowStyle = ProcessWindowStyle.Normal
.WorkingDirectory = [Ô]Aqui entra a pasta de trabalho da aplicação externa. Ex.: C:\Aplicativo\[Ô]
.FileName = [Ô]Aqui entra o nome do executável externo. Ex.: aplicativo.exe[Ô]
If Not My.Computer.FileSystem.FileExists(.WorkingDirectory & [Ô]\[Ô] & .FileName) Then
Exit Sub
End If
End With
proc.Start()
proc.WaitForInputIdle()
Threading.Thread.Sleep(500)
System.Windows.Forms.SendKeys.Send([Ô]^s[Ô])
proc.CloseMainWindow()
proc.Dispose()
Threading.Thread.Sleep(1)
...


Espero que funcione com a sua necessidade.
MARSOLIM 02/02/2014 11:47:22
#434078
professor não deu certo. tentei algumas alterações no código mas nada. então fiz diferente. criei um vbs para enviar o pressionamento e o programa abre esse vbs. aí deu certo.
o vbs que dei o nome de StopRec.vbs e coloquei na mesma pasta do exe do camtasia ficou assim
Option Explicit
Dim wshShell
Set wshShell= CreateObject([Ô]WScript.Shell[Ô])
wshShell.SendKeys [Ô]^s[Ô]
WScript.Quit
e no aplicativo eu chamo esse vbs
Process.Start([Ô]C:\Program Files\TechSmith\Camtasia Studio 7\StopRec.vbs[Ô])
assim deu certo. agradeço a atenção de todos que tentaram ajudar. abraço para vocês.
Tópico encerrado , respostas não são mais permitidas