Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - vb 2008 Spostare un programma all'interno del desktop
Forum - C# / VB.NET - vb 2008 Spostare un programma all'interno del desktop

Avatar
coyote100 (Normal User)
Rookie


Messaggi: 50
Iscritto: 22/04/2013

Segnala al moderatore
Postato alle 11:35
Mercoledì, 01/05/2013

Il programma funziona ma solo con il "notepad", infatti se apro la calcolatrice, quindi inserisco tra le virgolette "calc"(vedi codice) non si sposta.
Se mi potete aiutare..




Codice sorgente - presumibilmente VB.NET

  1. Public Class Form1
  2.  
  3.  
  4.  
  5.     Private Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As IntPtr
  6.  
  7.  
  8.  
  9.     Const HWND_TOPMOST As Integer = -1
  10.  
  11.     Const HWND_NOTOPMOST As Integer = -2
  12.  
  13.     Const SWP_NOSIZE As Integer = &H1
  14.  
  15.     Const SWP_NOACTIVATE As Integer = &H10
  16.  
  17.     Const SWP_SHOWWINDOW As Integer = &H40
  18.  
  19.  
  20.  
  21.     Private Declare Sub SetWindowPos Lib "User32" (ByVal hWnd As IntPtr, ByVal hWndInsertAfter As Integer, ByVal X As Integer, ByVal Y As Integer, ByVal cx As Integer, ByVal cy As Integer, ByVal wFlags As Integer)
  22.  
  23.  
  24.  
  25.     Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  26.  
  27.         Dim iHwnd As IntPtr = FindWindow("notepad", vbNullString)''inserire il programma desiderato
  28.  
  29.         SetWindowPos(iHwnd, HWND_TOPMOST, 100, 100, 0, 0, SWP_NOACTIVATE Or SWP_SHOWWINDOW Or SWP_NOSIZE)
  30.  
  31.  
  32.     End Sub
  33.  
  34.  
  35.  
  36. End Class


PM Quote
Avatar
Dark_light (Member)
Pro


Messaggi: 108
Iscritto: 11/04/2012

Segnala al moderatore
Postato alle 12:33
Mercoledì, 01/05/2013
Ciao coyote100,

Innanzitutto ti invito a studiare il metodo File.Move che puoi trovare su msdn al seguente link http://msdn.microsoft.com/en-us/library/system.io.file.mov ...

Il malloppo che hai scritto(?) può essere sostituito decisamente da questo semplice codice:
Codice sorgente - presumibilmente VB.NET

  1. Dim filedamuovere As String
  2.         Dim destinazionefile As String
  3.  
  4.         filedamuovere = "C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Accessories\Calculator.lnk"
  5.         destinazionefile = "C:\Users\nomeutente\Desktop\Calculator.lnk"
  6.  
  7.         If System.IO.File.Exists(filedamuovere) = True Then
  8.  
  9.             System.IO.File.Move( filedamuovere,  destinazionefile)
  10.             MsgBox("File spostato")
  11.  
  12.         End If



;)

PM Quote
Avatar
coyote100 (Normal User)
Rookie


Messaggi: 50
Iscritto: 22/04/2013

Segnala al moderatore
Postato alle 12:40
Mercoledì, 01/05/2013
Io parlo di spostare un programma nel desktop, cioè x,y

PM Quote
Avatar
coyote100 (Normal User)
Rookie


Messaggi: 50
Iscritto: 22/04/2013

Segnala al moderatore
Postato alle 14:40
Giovedì, 02/05/2013
C'è qualcuno che è in grado di aiutarmi!!!!!!

PM Quote
Avatar
ampeg (Normal User)
Pro


Messaggi: 124
Iscritto: 21/04/2011

Segnala al moderatore
Postato alle 20:40
Giovedì, 02/05/2013
per la calcolatrice in windows7 devi scrivere "calcframe" e non "calc"

PM Quote
Avatar
coyote100 (Normal User)
Rookie


Messaggi: 50
Iscritto: 22/04/2013

Segnala al moderatore
Postato alle 21:43
Giovedì, 02/05/2013
Ok, ma se volessi muovere programma esempio che si chiama orologio, come faccio?

PM Quote
Avatar
ampeg (Normal User)
Pro


Messaggi: 124
Iscritto: 21/04/2011

Segnala al moderatore
Postato alle 21:49
Venerdì, 03/05/2013
il primo argomento dell'API FindWindow richiederebbe il nome della classe a cui appartiene la finestra da spostare

per poterlo ottenere bisogna fare diverse chiamate ad altre API

ma comunque con la stessa funzione è anche possibile specificare il titolo della finestra e tralasciare il nome della classe (questa va messa = Nothing)

Codice sorgente - presumibilmente VB.NET

  1. Dim iHwnd As IntPtr = FindWindow(Nothing, "Calcolatrice") ''inserire il programma desiderato
  2. SetWindowPos(iHwnd, HWND_TOPMOST, 100, 100, 0, 0, SWP_NOACTIVATE Or SWP_SHOWWINDOW Or SWP_NOSIZE)



quindi nel secondo argomento metti il titolo esatto e completo come visualizzato nella finestra, l'API non fa distinzione tra maiuscole e minuscole

Ultima modifica effettuata da ampeg il 03/05/2013 alle 21:50
PM Quote
Avatar
ampeg (Normal User)
Pro


Messaggi: 124
Iscritto: 21/04/2011

Segnala al moderatore
Postato alle 22:30
Venerdì, 03/05/2013
ho trovato un altro metodo che utilizza la proprietà MainWindowHandle della classe Process

in questo caso anziché passare il titolo della finestra passi direttamente il nome del processo

Codice sorgente - presumibilmente VB.NET

  1. ' ottengo le istanze del processo specificato
  2.     Dim proc() As Process = Process.GetProcessesByName("calc")
  3.     Dim iHwnd As IntPtr
  4.  
  5.     For Each p As Process In proc
  6.       If p.MainWindowHandle <> 0 Then
  7.  
  8.         ' ottengo l'hwnd della finestra principale del processo
  9.         iHwnd = p.MainWindowHandle
  10.         Exit For
  11.  
  12.       End If
  13.     Next
  14.  
  15.     If (iHwnd <> 0) Then
  16.       SetWindowPos(iHwnd, HWND_TOPMOST, 100, 100, 0, 0, SWP_NOACTIVATE Or SWP_SHOWWINDOW Or SWP_NOSIZE)
  17.     End If


Ultima modifica effettuata da ampeg il 03/05/2013 alle 22:31
PM Quote
Avatar
coyote100 (Normal User)
Rookie


Messaggi: 50
Iscritto: 22/04/2013

Segnala al moderatore
Postato alle 8:09
Sabato, 04/05/2013
BRAVO ampeg HAI RISOLTO IL MIO PROBLEMA.
10° lode

PM Quote