Paltalk 10.2 Programming Updates

I gonna put the paltalk 10.2 codes here updates, I having an issue that programs wont work in color rooms at the first try, like you need to close and open the rooms again for them to work.

Check the codes and any suggestions can be posted here 🙂

Paltalk Greeter 2006 any pal 8 or 9vb102sc

51 thoughts on “Paltalk 10.2 Programming Updates

  1. @locohacker wrote:

    Ah, I want the listview thou ehhehe can it be done via index or I have to use the old style ❓

    It can absolutely be done. Try looking at the chathnd method and you should see why it wont do the job for the syslistview. but you should also be able to see what chathnd does and figure out how to then find the syslistview.

  2. ‘@ Jerrri2012 – Interesting. Nice that its cross platform. I’d check it out, but the express versions are painfully limited. Looks a lot like the .net syntax.

    @ Loco – updated my example here.

  3. light so ya got it working ❓

    nalet I gonna chek it more next week, cause Im still having the issue, it still works with the black room is the color ones thats having the issue 🙄

  4. @Jerrri2012 wrote:

    1st green rooms classcpanecontainerex 0 and OfficeActiveX0

    Yeah, the green room is the only one with the OfficeActivex reference.

  5. Here is an example I wrote to show how to read and send text to pal 10.

    You’ll notice, that there is no need to look for “classcpanecontainerex” or “atlaxwin90” controls. It therefore works with any colored room. It’s a lot better method than whats been used, and a lot more flexible.

    @ Loco, I tried just adding my code to the Greeter project, but it became too hard to follow trying to combine the 2. Using this code will also solve the “close and re-open the room for it to work ” problem.

    @ light, the language makes no difference.

  6. express here the code, but I updated the way to connect to the room, I use the combo box like the others program, so test it out I havent done much testing 😀

  7. Yeps, they using a different api to connect to the rooms 🙂 and if you can get into .net I would do it, I being saying I will be getting into for a while lol and I never do 🙂

  8. Aigh String I got the scroller working with ya code 🙂 but it works fine on build 438 but the new beta 450 is not working if u got time could u text the sendcode of urs in 450 Thanks 🙂 this dam sht is giving me a headache already and is summer dammit lol

  9. Loco,
    In build 450, the send text and read text indexes have changed.
    Send text index is now 3. Formally 2.
    Read text index is now 4. Formally 3.

    Edit/ I also notice that the path used to find the version number has changed.
    Path is now

    Const PalVerRegLoc10Beta As String = "HKLMSOFTWAREMicrosoftWindowsCurrentVersionUninstallPaltalk Messenger"

    I’ll update the example sometime today, probably late.

  10. K it works with those indexes 🙂 and I’m trying to figure this index thingy out, cause I though you suppose to count how many times a handle appears after the main window, in this case SplitterWindowEx and in this pic of the api i see there are 3 RichEdit20W from SplitterWindowEx so the index is 3 like you say
    [attachment=1:cf4uszrf]sendindex.JPG[/attachment:cf4uszrf]
    but to get the text there only 2 RichEdit20W that appear after the SplitterWindowEx yet the index is 4 lol wtf man that’s confusing hehehe
    [attachment=0:cf4uszrf]get.JPG[/attachment:cf4uszrf]
    PS: Jerrri2012 am i suppose to use

    If classcpanecontainerex  0 And OfficeActiveX = 0 Then

    instead of

    If classcpanecontainerex = 0 Then

    in the way I used to connect to the room ❓

  11. for the people interested in how we are going to code hook paltalk incoming and outgoing text and let paltalk do all the dirty work for us, then this pdf is an excellent example of what I was trying to explain, it talks about the Microsoft pinball game to retrieve scores, but take the methods explained here and apply them for paltalk text instead. please take the time to read the whole tutorial, should only take 30 minutes tops….

    Download:
    [attachment=0:1zt12n8y]Complete Guide to Code Caves-Drew Benton.pdf[/attachment:1zt12n8y]

  12. i didn’t change my code for build 438 and still working for beta 450
    my plateform is XP SP2
    may be problem could come from this:
    if win 7 try on desktop shortcut of your vb application right click and select xp compatibility

  13. hi loco
    3 cases
    1st green rooms classcpanecontainerex 0 and OfficeActiveX0
    2nd blue rooms classcpanecontainerex 0 and OfficeActiveX = 0
    3rd black rooms classcpanecontainerex= 0 and OfficeActiveX = 0

  14. @locohacker wrote:

    K so like the send and get text there are two functions to do one job 🙂 is that what you mean

    @autopilot wrote:

    It can absolutely be done. Try looking at the chathnd method

    In your function SystenViewHandle, you have the line:

    SystenViewHandle = ChatHnd(iPHnd, SysListView32index)

    AutoPilot spotted your error. If you look at the ChatHnd function in your code, you’ll see that it references RichEdit20W, and you want SysListView32.

    You can write a new function using the code in the ChatHnd function. Change it to reference the syslistview32.

  15. @String wrote:

    You can get around some of this by stretching the chat room window to its maximum width. Also, removing the text formatting for incoming text also will help.

    I know, but this solution doesn’t work always
    How to get a full comment by code
    I saw this in some programs
    🙄

  16. keep in mind this will require updating every time a new paltalk build gets released, but I can help you minimize the update using a search and replace method for patching, meaning you can search for an array of bytes using wildcards which means you might not have to update until paltalk decide to change the function. it works like “xxx??Xxx?xxx??” the questions marks can be any byte value but the “x” must match, this will return an address in memory to place your code hook. but ofcause I will discuss this in more detail when I get home and write some examples..

  17. I am at a work doing a training course for 2 weeks(locked down at a resort) so code demo will come when I get home. basically there are a couple of way to do it. you could hook an API which contains the message, and in your hook look for key strings, if the key string matches then pass the message to a parsing function. Or you could code hook the function in paltalk which means you would require to debug paltalk and get the address you wanted to place a jump to your code cave, and from there pass the string on to the parsing part of your code.I personally like this method the best and balool uses this method also, but this would mean updating your program with a new address to hook each time paltalk releases another version. hooking an API that contains the message would be more suited for different paltalk versions but it also comes with disadvantage, Alot of antivirus could detect this API hook, and mistake it for a virus. so you really need to weigh up what suits you the best. for personal apps I would hook the API method thus reducing the need to update every version of paltalk, but for public use I would code hook the paltalk function which contains the strings being passed, but this means updating. Then if implementing an updating system like balool you would only need to update 1 online file with new addresses and the programs could auto update it self without the user needing to download a new version of your program. A simple API to hook for example would be winsock, but there are others which would also have message string so your not limited to API hooking winsock only. I guess it comes down to you… if you think its worth the extra code making an update system for code hooking or spend the extra time creating a good parsing routine for API hooking, actually microsoft call this a “detour”… anyway have think about which method you prefer and I will write a simple demo(in delphi ofcause)..

  18. If the sent text is so long that it takes 2 lines, then only the last line will be returned.

    Eg:
    PalUser: Some really long text string that
    wraps to the next line.

    Your “getlastline” function will return: “wraps to the next line.” As its name implies.

    You can get around some of this by stretching the chat room window to its maximum width. Also, removing the text formatting for incoming text also will help.

  19. Hey loco, I think its time to start hooking paltalk text instead using Sendmessage/Postmessage types of codes to get text and send text, I also noticed you talked about cpu reaching 100% in a couple of recent threads. I highly suggest letting paltalk do the work for you and just “relaying” the incoming and outgoing to text to your applications, this should reduce a lot of your codes and make it a lot easier to update once you get the hang of it. just about every third party program for paltalk is based around incoming and outgoing text, so if you make this part easy then its only the imagination and good use of parsing the text that will determine how many different paltalk applications can be built. If you find it too much a task to hook then use the already created balool which does all the work for you and just release a series of plugins as applications for paltalk.. Otherwise if your ready to take a new step in programming and are willing to hook the text I can show you how it can be done using code injection methods to intercept incoming text and hows to send text straight to paltalk using the same method.

    Anyway good job updating the codes it will be useful to many…

  20. nalet, did u try closing and opening the room again, cause im having an issue with that ❓
    Light the code to getnick is this now

    Function NickGet()
    Dim dlggroupchatwindowclass As Long, splitterwindowex As Long, classcpanecontainerex As Long
    Dim atlffdd As Long, syslistview As Long
    dlggroupchatwindowclass = FindWindow("dlggroupchat window class", Form1.Combo1.Text)
    splitterwindowex = FindWindowEx(dlggroupchatwindowclass, 0&, "splitterwindowex", vbNullString)
    splitterwindowex = FindWindowEx(splitterwindowex, 0&, "splitterwindowex", vbNullString)
    splitterwindowex = FindWindowEx(splitterwindowex, 0&, "splitterwindowex", vbNullString)
    splitterwindowex = FindWindowEx(splitterwindowex, 0&, "splitterwindowex", vbNullString)
    splitterwindowex = FindWindowEx(splitterwindowex, 0&, "splitterwindowex", vbNullString)
    classcpanecontainerex = FindWindowEx(splitterwindowex, 0&, "classcpanecontainerex", vbNullString)
    If classcpanecontainerex = 0 Then
    cwndmembertree = FindWindowEx(splitterwindowex, 0&, "cwndmembertree", vbNullString)
    syslistview = FindWindowEx(cwndmembertree, 0&, "syslistview32", vbNullString)
    Else
    classcpanecontainerex = FindWindowEx(splitterwindowex, classcpanecontainerex, "classcpanecontainerex", vbNullString)
    atlffdd = GetWindow(classcpanecontainerex, GW_CHILD)
    syslistview = FindWindowEx(atlffdd, 0&, "syslistview32", vbNullString)
    End If
    Call GetListviewItem(syslistview)
    End Function

    But we still having issues lol as u can see :dave:

  21. @locohacker wrote:

    And hey am I not suppose to call the handle like this

    My function GetTheClassHnd asks for three parameters.@String wrote:

    This should find the handle for any class as long as you feed it a Handle, a Index and a Class name.

    This line in your SystenViewHandle only asks for two. The parameter your missing is the listview class name.

    iPHnd = GetTheClassHnd(iPHnd, SysListView32index)

    and there is no codeto set the value of SystenViewHandle

    Try this:

    Private Function SystenViewHandle() As Long
    Dim iPHnd As Long
    
    iPHnd = getPalSubForm(WindowClass, Combo1.Text, SplittrWindow10, SplittrIndex10)
    SystenViewHandle= GetTheClassHnd(iPHnd, SysListView32index,"SysListView32")
    Debug.Print ("SystenViewHandle- " & SystenViewHandle) ' for testing
    End Function

     

    @Departure – thanks for the upload. I’m anxious to read it.

  22. hi
    There is something wrong in admin bot
    If there is a long comment, it doesn’t appear in text6 or text5
    the problem in getlastline code
    Gets the last line ,,,,doesn’t get the full comment 🙄 ❓

  23. Thank you for your interest loco. 🙂
    What’s wrong with this code?
    please ❓

    Public Function MessageCrossProcess(ByVal hwnd As Long)
    Dim lProcID As Long
    Dim hProc As Long
    Dim lxprocLVITEM As Long
    Dim LVITEM As LV_ITEM
    Dim lItemPos As Long
    
    GetWindowThreadProcessId hwnd, lProcID ' Get the process ID in which the ListView is running
    If lProcID 0 Then
    hProc = OpenProcess(PROCESS_VM_OPERATION Or PROCESS_VM_READ Or PROCESS_VM_WRITE, False, lProcID) ' make sure we have read write permissions in the process space
    If hProc 0 Then
    lxprocLVITEM = VirtualAllocEx(hProc, 0, LenB(LVITEM), MEM_RESERVE Or MEM_COMMIT, PAGE_READWRITE) ' Grab enough memory in the other procedure's space to hold our LV_ITEM
    
    ' Set up our local LV_ITEM to change the selected item
    LVITEM.mask = LVIF_STATE
    LVITEM.state = True
    LVITEM.stateMask = LVIS_SELECTED Or LVIS_FOCUSED ' Just enforcing the selection better than in original version by moving the focus as well
    ' Copy the local LV_ITEM into the space we reserved in the foreign process
    WriteProcessMemory hProc, ByVal lxprocLVITEM, ByVal VarPtr(LVITEM), LenB(LVITEM), 0
    
    ' Now send the message, but pass the address of the copy of our LV_ITEM that now exists in the foreign process instead of our local version
    ' Aigh Peeps this wha you need to change in order to higlight the item you want :)
    lItemPos = Form1.Text8.text ' first item
    SendMessage hwnd, LVM_SETITEMSTATE, lItemPos, ByVal lxprocLVITEM
    
    ' Clean up
    VirtualFreeEx hProc, ByVal lxprocLVITEM, LenB(LVITEM), MEM_RELEASE
    CloseHandle hProc
    End If
    End If
    
    End Function

     

    Doesnt work

  24. Hey so how u use the index thing to get nicks from the room, so far i done this
    Declare
    Const SysListView32index As Integer = 1
    added function

    Private Function SystenViewHandle() As Long
    Dim iPHnd As Long
    
    iPHnd = getPalSubForm(WindowClass, Combo1.Text, SplittrWindow10, SplittrIndex10)
    SystenViewHandle = ChatHnd(iPHnd, SysListView32index)
    Debug.Print ("SystenViewHandle- " & SystenViewHandle) ' for testing
    End Function

    and call nick like this

    Function NickGet()
    Dim iHnd As Long
    
    If Len(Combo1.Text) > 1 Then
    FindTheWindow (Combo1.Text)
    End If
    
    'get nicks
    iHnd = SystenViewHandle
    Call GetListviewItem(iHnd)
    End Function

    and nada ): the listview goes empty

  25. Thanks Dep 🙂
    And hey am I not suppose to call the handle like this

    Private Function SystenViewHandle() As Long
    Dim iPHnd As Long
    
    iPHnd = getPalSubForm(WindowClass, Combo1.Text, SplittrIndex10, SplittrIndex10)
    iPHnd = GetTheClassHnd(iPHnd, SysListView32index)
    Debug.Print ("SystenViewHandle- " & SystenViewHandle) ' for testing
    End Function

    It keeps saying argument not optional 🙄

  26. I only have notepad++ to write code in at the moment, so this is un-tested but should work.
    This should find the handle for any class as long as you feed it a Handle, a Index and a Class name.

    Public Function GetTheClassHnd(ByVal ParentTargethwnd As Long, ByVal TargetIndex As Long, TargetCls As String) As Long
    
    'Returns a class's handle
    Dim retVal As Long
    
    mTargetSubClass = TargetCls
    mTargetSubClassIndex = TargetIndex
    IndexCount = 1
    retVal = EnumChildWindows(ParentTargethwnd , AddressOf EnumChildProc, TargetIndex)
    GetTheClassHnd = mSubFormHnd
    End Function

     

    You could use this instead of ChatHnd in your SystenViewHandle function.

Leave a Reply

You must Register or Login to comment on Paltalk 10.2 Programming Updates