ok i have the answer for your question one:
We calculate -10000000 because 10000000 is the Base Address of CShell.dll. When you add an log to your hack and then you logg the GetModuleHandle("CShell.dll") you got the CShell Base addres. But then the CShell base address is not 10000000. Thats why we make the pointer - base addres. In your Project you make CShell base Address + calculated pointer. If you have other questions you can ask me....