Oppure

Loading
01/05/13 9:35
coyote100

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..




Public Class Form1



    Private Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As IntPtr



    Const HWND_TOPMOST As Integer = -1

    Const HWND_NOTOPMOST As Integer = -2

    Const SWP_NOSIZE As Integer = &H1

    Const SWP_NOACTIVATE As Integer = &H10

    Const SWP_SHOWWINDOW As Integer = &H40



    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)



    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        Dim iHwnd As IntPtr = FindWindow("notepad", vbNullString)''inserire il programma desiderato

        SetWindowPos(iHwnd, HWND_TOPMOST, 100, 100, 0, 0, SWP_NOACTIVATE Or SWP_SHOWWINDOW Or SWP_NOSIZE)


    End Sub



End Class





aaa
01/05/13 10:33
Dark_light
Ciao coyote100,

Innanzitutto ti invito a studiare il metodo File.Move che puoi trovare su msdn al seguente link msdn.microsoft.com/en-us/library/…

Il malloppo che hai scritto(?) può essere sostituito decisamente da questo semplice codice:
  Dim filedamuovere As String
        Dim destinazionefile As String

        filedamuovere = "C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Accessories\Calculator.lnk"
        destinazionefile = "C:\Users\nomeutente\Desktop\Calculator.lnk"

        If System.IO.File.Exists(filedamuovere) = True Then

            System.IO.File.Move( filedamuovere,  destinazionefile)
            MsgBox("File spostato")

        End If


;)
aaa
01/05/13 10:40
coyote100
Io parlo di spostare un programma nel desktop, cioè x,y
aaa
02/05/13 12:40
coyote100
C'è qualcuno che è in grado di aiutarmi!!!!!!
aaa
02/05/13 18:40
ampeg
per la calcolatrice in windows7 devi scrivere "calcframe" e non "calc"
aaa
02/05/13 19:43
coyote100
Ok, ma se volessi muovere programma esempio che si chiama orologio, come faccio?
aaa
03/05/13 19:49
ampeg
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)

Dim iHwnd As IntPtr = FindWindow(Nothing, "Calcolatrice") ''inserire il programma desiderato
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 03/05/13 19:50
aaa
03/05/13 20:30
ampeg
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


    ' ottengo le istanze del processo specificato
    Dim proc() As Process = Process.GetProcessesByName("calc")
    Dim iHwnd As IntPtr

    For Each p As Process In proc
      If p.MainWindowHandle <> 0 Then

        ' ottengo l'hwnd della finestra principale del processo
        iHwnd = p.MainWindowHandle
        Exit For

      End If
    Next

    If (iHwnd <> 0) Then
      SetWindowPos(iHwnd, HWND_TOPMOST, 100, 100, 0, 0, SWP_NOACTIVATE Or SWP_SHOWWINDOW Or SWP_NOSIZE)
    End If

Ultima modifica effettuata da ampeg 03/05/13 20:31
aaa