Jump to content

Recommended Posts

Posted

 

Is there a way to embed notepad into the tab?

 

#include <WindowsConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <File.au3>
#include <String.au3>
#include <Array.au3>
#include <WinAPI.au3>

$Main_GUI = GUICreate("Notepad", 800, 600, -1, -1)
GUICtrlCreateTab(0, 10, 800, 400)
$tab1 = GUICtrlCreateTabItem("tab0")

$iCmd_PID = Run('notepad.exe', "", @SW_HIDE)
ProcessWait($iCmd_PID)

$Embed_hWnd = _GetHWndByPID($iCmd_PID)
WinMove($Embed_hWnd, "", 0, 50, 800, 500)
WinSetState($Embed_hWnd, "", @SW_SHOWMINNOACTIVE)

GUISetState(@SW_SHOW, $Main_GUI)
$origParent = DllCall("user32.dll", "int", "SetParent", "hwnd", $Embed_hWnd, "hwnd", $Main_GUI)
GUICtrlCreateTabItem("tab1")

While 1
    $nMSG = GUIGetMsg()
    Switch $nMSG
        Case $GUI_EVENT_CLOSE
            ProcessClose($iCmd_PID)
            Exit
    EndSwitch
WEnd


Func _GetHWndByPID($iPID)
    Local $aWinList = WinList()
    For $i = 1 To UBound($aWinList) - 1
        If WinGetProcess($aWinList[$i][1]) = $iPID Then Return $aWinList[$i][1]
    Next
    Return 0
EndFunc   ;==>_GetHWndByPID

 

Posted (edited)

Yes.

It is normal edit control.

 

 

Edited by mLipok

Signature beginning:
Please remember: "AutoIt"..... *  Wondering who uses AutoIt and what it can be used for ? * Forum Rules *
ADO.au3 UDF * POP3.au3 UDF * XML.au3 UDF * IE on Windows 11 * How to ask ChatGPT for AutoIt Codefor other useful stuff click the following button:

  Reveal hidden contents

Signature last update: 2023-04-24

Posted (edited)

Not a solution to your problem, but I do have an addition...

 

Put this below your WinMove...

_WinAPI_SetWindowRgn($Embed_hWnd, _WinAPI_CreateRectRgn(10, 30, 800, 500)) ; Cut off NotePad window border

...and change your WinMove to...

WinMove($Embed_hWnd, "", -10, 0, 800, 500)

...to cut off the NotePad window border, looks better imo, and the notepad window cant be moved.

Play around with the border settings as needed.

Edited by Werty

Some guy's script + some other guy's script = my script!

Posted (edited)

quick test, not perfect.....

__ExampleA()
Func __ExampleA()
    Run('notepad.exe', "", @SW_HIDE)
    Local $hWnd = WinWait("[CLASS:Notepad]", "", 10)
    Local $hControl = ControlGetHandle($hWnd, "", "Edit1")
    WinMove($hWnd, "", 100, 100, 500, 350)

    Local $M_GUI = GUICreate("Notepad", 500, 300, 100, 100)
    DllCall("user32.dll", "int", "SetParent", "hwnd", $hControl, "hwnd", $M_GUI)
    GUISetState()

    Do
        Sleep(10)
    Until  GUIGetMsg() = -3

    GUIDelete($M_GUI)
    WinClose($hWnd)
EndFunc

if not this then wait for MVP to reply :lmao:

Edited by jugador
  • Solution
Posted

 

I have now solved it with child guis.

not perfect but it does the job.

 

#include <WindowsConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <File.au3>
#include <String.au3>
#include <Array.au3>
#include <WinAPI.au3>

$Main_GUI = GUICreate("cmd", 800, 600, -1, -1)
$btn1 = GUICtrlCreateButton("tab1", 10, 10, 70, 30)
$btn2 = GUICtrlCreateButton("tab2", 85, 10, 70, 30)

$hChild1 = GUICreate("child1", 800, 500, 0, 40,  BitOR($WS_POPUP, $WS_CHILD), $WS_EX_MDICHILD, $Main_GUI)
GUISetBkColor(0x000000)
GUISetState(@SW_HIDE, $hChild1)
$iCmd_PID = Run(@ComSpec & " /k " & 'cmd.exe', "", @SW_HIDE)
ProcessWait($iCmd_PID)

$Embed_hWnd = _GetHWndByPID($iCmd_PID)
$iStyle = $WS_POPUP ;BitOR($WS_POPUP, $WS_BORDER);BitXOR($iStyle, $WS_POPUP);$WS_MAXIMIZEBOX, $WS_MINIMIZEBOX, $WS_SIZEBOX)
_WinAPI_SetWindowLong($Embed_hWnd, $GWL_STYLE, $iStyle)
_WinAPI_SetWindowLong($Embed_hWnd, $GWL_EXSTYLE, $WS_EX_MDICHILD)
WinMove($Embed_hWnd, "", 0, 0, 800, 500)
WinSetState($Embed_hWnd, "", @SW_SHOWMINNOACTIVE)

$origParent = DllCall("user32.dll", "int", "SetParent", "hwnd", $Embed_hWnd, "hwnd", $hChild1)
GUISetState(@SW_SHOWNOACTIVATE, $hChild1)
GUISetState(@SW_SHOW, $Main_GUI)


$hChild2 = GUICreate("child2", 800, 500, 0, 40,  BitOR($WS_POPUP, $WS_CHILD), $WS_EX_MDICHILD, $Main_GUI)
GUISetBkColor(0x000000)
GUISetState(@SW_HIDE, $hChild2)
$iCmd_PID2 = Run(@ComSpec & " /k " & 'ipconfig', "", @SW_HIDE)
ProcessWait($iCmd_PID)

$Embed_hWnd2 = _GetHWndByPID($iCmd_PID2)
$iStyle = $WS_POPUP ;BitOR($WS_POPUP, $WS_BORDER);BitXOR($iStyle, $WS_POPUP);$WS_MAXIMIZEBOX, $WS_MINIMIZEBOX, $WS_SIZEBOX)
_WinAPI_SetWindowLong($Embed_hWnd2, $GWL_STYLE, $iStyle)
_WinAPI_SetWindowLong($Embed_hWnd2, $GWL_EXSTYLE, $WS_EX_MDICHILD)
WinMove($Embed_hWnd2, "", 0, 0, 800, 500)
WinSetState($Embed_hWnd2, "", @SW_SHOWMINNOACTIVE)

$origParent2 = DllCall("user32.dll", "int", "SetParent", "hwnd", $Embed_hWnd2, "hwnd", $hChild2)

GUISetState(@SW_HIDE, $hChild2)
GUISetState(@SW_SHOW, $Main_GUI)

While 1
    $nMSG = GUIGetMsg()
    Switch $nMSG
        Case $GUI_EVENT_CLOSE
            ProcessClose($iCmd_PID)
            ProcessClose($iCmd_PID2)
            Exit
        Case $btn1
            $origParent = DllCall("user32.dll", "int", "SetParent", "hwnd", $Embed_hWnd, "hwnd", $hChild1)
            GUISetState(@SW_HIDE, $hChild2)
            GUISetState(@SW_SHOW, $hChild1)
        Case $btn2
            $origParent = DllCall("user32.dll", "int", "SetParent", "hwnd", $Embed_hWnd2, "hwnd", $hChild2)
            GUISetState(@SW_HIDE, $hChild1)
            GUISetState(@SW_SHOW, $hChild2)
    EndSwitch
WEnd


Func _GetHWndByPID($iPID)
    Local $aWinList = WinList()
    For $i = 1 To UBound($aWinList) - 1
        If WinGetProcess($aWinList[$i][1]) = $iPID Then Return $aWinList[$i][1]
    Next
    Return 0
EndFunc   ;==>_GetHWndByPID

 

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...