|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Jul 2008
Messaggi: 1426
|
[C#]Inserire la finestra di un programma esterno al progetto in un altra del progetto
Salve a tutti,
avete presenti quei programmi nei quali compaiono + finestre? Intendo proprio finestre "classiche" con la crocetta per chiudere, la barretta per rimpicciolire a icona e così via... Ad esempio come in questo pezzetto di un immagine: ![]() Bene, non so se è possibile, ma io vorrei semplicemente far apparire la finestra di firefox all'interno del mio programma. C'è un modo? Se c'è bene se no pazienza ma mi incuriosiva saperlo ![]() Ditemi anche solo cosa cercare su google. |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Jul 2008
Messaggi: 1426
|
Come al solito pretendo velocità
![]() ![]() |
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Mar 2006
Città: Milano
Messaggi: 832
|
vuoi aprire una form all'interno di una form? se fosse un form del programma basterebbe dargli dei limiti di coordinate... non credo si posso fare con un programma esterno. (se hai bisogno di aprire pagine internet c'è il controllo webbrowser)
|
![]() |
![]() |
![]() |
#4 | |
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
Quote:
|
|
![]() |
![]() |
![]() |
#5 | |
Senior Member
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
|
Quote:
Se fosse internet explorer sarebbe piu' semplice.
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto. E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test. |
|
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: Jul 2008
Messaggi: 1426
|
A me interesserebbe solamente aprire firefox, non interagirci.
Guardate qua per esempio: http://bytes.com/topic/c-sharp/answe...ws-forms-panel la domanda che fa l'utente è un altra ma parte dal presupposto di avere "integrato" il notepad in una form. Sempre che non si riferisca a qualcosa tipo la richtextbox (se si chiama così) o comunque controlli presenti già in visual studio... Ad ogni modo lui ha fatto così: Codice:
ProcessStartInfo psi = new ProcessStartInfo("notepad"); p = Process.Start(psi); p.WaitForInputIdle(); SetParent(p.MainWindowHandle, uiAppPanel.Handle); ShowWindow(p.MainWindowHandle, (int)ShowCommands.SW_MAXIMIZE); int style = GetWindowLong(p.MainWindowHandle, GWL_STYLE); SetWindowLong(p.MainWindowHandle, GWL_STYLE, style & ~WS_CAPTION); |
![]() |
![]() |
![]() |
#7 |
Senior Member
Iscritto dal: Jul 2008
Messaggi: 1426
|
ho provato questo codice:
Codice:
Process p = Process.Start("notepad.exe"); p.WaitForInputIdle(); SetParent(p.MainWindowHandle, panel1.Handle); MoveWindow(p.MainWindowHandle, 0, 0, panel1.Width, panel1.Height, false); [DllImport("user32.dll")] static extern IntPtr SetParent(IntPtr hWndChild, IntPtr hWndNewParent); [DllImport("user32.dll")] private static extern bool MoveWindow(IntPtr hwnd, int x, int y, int w, int h, bool repaint); ![]() |
![]() |
![]() |
![]() |
#8 |
Senior Member
Iscritto dal: Jul 2008
Messaggi: 1426
|
![]() |
![]() |
![]() |
![]() |
#9 | |
Senior Member
Iscritto dal: Jan 2005
Città: Siena
Messaggi: 1313
|
Quote:
![]() |
|
![]() |
![]() |
![]() |
#10 |
Senior Member
Iscritto dal: Jul 2008
Messaggi: 1426
|
A tal proposito che tipo di panel deve essere panel1? Va bene uno stackpanel? (lavoro in wpf)
Comunque ecco gli errori (sono generati dalla penultima riga di codice): Errore 1 È previsto il segno } Errore 2 È prevista una classe, un delegato, un enum, un'interfaccia o uno struct Errore 3 È prevista una classe, un delegato, un enum, un'interfaccia o uno struct Errore 4 È previsto un identificatore Errore 5 È prevista una classe, un delegato, un enum, un'interfaccia o uno struct Errore 6 È prevista una classe, un delegato, un enum, un'interfaccia o uno struct Errore 7 È previsto un identificatore Errore 8 Uno spazio dei nomi non può contenere direttamente membri come campi o metodi Errore 9 È prevista una classe, un delegato, un enum, un'interfaccia o uno struct Errore 10 È previsto un identificatore Errore 11 È prevista una classe, un delegato, un enum, un'interfaccia o uno struct Errore 12 È previsto un identificatore Errore 13 È previsto un identificatore Errore 14 Errore di sintassi, è previsto ']' Errore 15 È prevista una classe, un delegato, un enum, un'interfaccia o uno struct Errore 16 È prevista una classe, un delegato, un enum, un'interfaccia o uno struct Errore 17 È prevista la definizione del tipo o dello spazio dei nomi oppure la fine del file Errore 18 '[' è un termine non valido nell'espressione Errore 19 È previsto un punto e virgola ( ![]() Errore 20 ']' è un termine non valido nell'espressione Errore 21 È previsto un punto e virgola ( ![]() Errore 22 È previsto un punto e virgola ( ![]() |
![]() |
![]() |
![]() |
#11 | |
Senior Member
Iscritto dal: Jan 2005
Città: Siena
Messaggi: 1313
|
Quote:
![]() questa roba Codice:
[DllImport("user32.dll")] static extern IntPtr SetParent(IntPtr hWndChild, IntPtr hWndNewParent); [DllImport("user32.dll")] private static extern bool MoveWindow(IntPtr hwnd, int x, int y, int w, int h, bool repaint); Codice:
Process p = Process.Start("notepad.exe"); p.WaitForInputIdle(); SetParent(p.MainWindowHandle, panel1.Handle); MoveWindow(p.MainWindowHandle, 0, 0, panel1.Width, panel1.Height, false); va messa all'interno di un metodo |
|
![]() |
![]() |
![]() |
#12 |
Senior Member
Iscritto dal: Jul 2008
Messaggi: 1426
|
Ops
![]() Senti ancora un problema ma cosa devo includere nel progetto? Intendo using ecc ecc perchè ciò che ho messo io non va.. Mi riferisco a ciò che serve per importare la dll |
![]() |
![]() |
![]() |
#13 | |
Senior Member
Iscritto dal: Jan 2005
Città: Siena
Messaggi: 1313
|
Quote:
|
|
![]() |
![]() |
![]() |
#14 |
Senior Member
Iscritto dal: Jul 2008
Messaggi: 1426
|
Non trovo il tipo di panel giusto da usare... Ho provato:
Canvas DockPanel Grid StackPanel ToolBarOverflowPanel UniformGrid VirtualizingPanel VirtualizingStackPanel WrapPanel E nessuno funziona... |
![]() |
![]() |
![]() |
#15 | |
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
Quote:
Hai copiato il codice da qualche parte? Sarà che il codice che hai copiato è per WinForms mentre te stai usando WPF? Che vuol dire nessuno funziona? Che errori hai? Che codice hai scritto? |
|
![]() |
![]() |
![]() |
#16 |
Senior Member
Iscritto dal: Jul 2008
Messaggi: 1426
|
Appunto non so che ipo di panel usare su wpf......
|
![]() |
![]() |
![]() |
#17 |
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
|
![]() |
![]() |
![]() |
#18 |
Senior Member
Iscritto dal: Jul 2008
Messaggi: 1426
|
panel1 è di tipo StackPanel ed ecco gli errori:
Errore 1 'System.Windows.Controls.StackPanel' non contiene una definizione di 'Handle' e non è stato trovato alcun metodo di estensione 'Handle'che accetta un primo argomento di tipo 'System.Windows.Controls.StackPanel'. Probabilmente manca una direttiva using o un riferimento a un assembly. 133 50 Errore 2 La corrispondenza migliore del metodo di overload per 'Mattyfog_Music_Youtuber.Window1.MoveWindow(System.IntPtr, int, int, int, int, bool)' presenta alcuni argomenti non validi 134 13 Errore 3 Argomento '4': impossibile convertire da 'double' a 'int' 134 50 Errore 4 Argomento '5': impossibile convertire da 'double' a 'int' 134 64 Mentre in un metodo ho scritto questo: Codice:
Process p = Process.Start("notepad.exe"); p.WaitForInputIdle(); SetParent(p.MainWindowHandle, panel1.Handle); MoveWindow(p.MainWindowHandle, 0, 0, panel1.Width, panel1.Height, false); } Codice:
[DllImport("user32.dll")] static extern IntPtr SetParent(IntPtr hWndChild, IntPtr hWndNewParent); [DllImport("user32.dll")] private static extern bool MoveWindow(IntPtr hwnd, int x, int y, int w, int h, bool repaint); |
![]() |
![]() |
![]() |
#19 | |
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
Quote:
Non esiste alcun Handle di finestra se non quello della finestra principale che può essere recuperato cosi: http://www.codeproject.com/KB/WPF/MessageBox.aspx. |
|
![]() |
![]() |
![]() |
#20 |
Senior Member
Iscritto dal: Jul 2008
Messaggi: 1426
|
Quindi io ho scritto così:
Codice:
Process p = Process.Start("notepad.exe"); p.WaitForInputIdle(); SetParent(new WindowWrapper(p.MainWindowHandle), panel1.Handle); MoveWindow(new WindowWrapper(p.MainWindowHandle), 0, 0, panel1.Width, panel1.Height, false); Codice:
public class WindowWrapper : System.Windows.Forms.IWin32Window { public WindowWrapper(IntPtr handle) { _hwnd = handle; } public IntPtr Handle { get { return _hwnd; } } private IntPtr _hwnd; } Errore 1 'System.Windows.Controls.StackPanel' non contiene una definizione di 'Handle' e non è stato trovato alcun metodo di estensione 'Handle'che accetta un primo argomento di tipo 'System.Windows.Controls.StackPanel'. Probabilmente manca una direttiva using o un riferimento a un assembly. 133 69 Errore 2 La corrispondenza migliore del metodo di overload per 'Mattyfog_Music_Youtuber.Window1.MoveWindow(System.IntPtr, int, int, int, int, bool)' presenta alcuni argomenti non validi 134 13 Errore 3 Argomento '1': impossibile convertire da 'WindowWrapper' a 'System.IntPtr' 134 24 Errore 4 Argomento '4': impossibile convertire da 'double' a 'int' 134 69 Errore 5 Argomento '5': impossibile convertire da 'double' a 'int' 134 83 |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 04:01.